package com.lyc.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lyc.DTO.PostsDTO;
import com.lyc.mapper.PostsMapper;
import com.lyc.pojo.Category;
import com.lyc.pojo.PageBean;
import com.lyc.pojo.Post;
import com.lyc.pojo.Result;
import com.lyc.service.PostsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class PostsServiceImpl implements PostsService {

    @Autowired
    private PostsMapper PostsMapper;
    @Autowired
    private PostsMapper postsMapper;


    // 添加文章
    @Override
    @Transactional// 开启事务
    public void addPost(PostsDTO pDTO) {
        PostsMapper.addPost(pDTO);
    }

    // 根据文章标题查询文章
    @Override
    public Post findByPost(String title) {
        Post post = PostsMapper.findByPost(title);
        if (post != null) {
            return post;
        }
        return null;
    }

    // 获取文章列表（分页）
    @Override
    public PageBean<Post> getPostsList(Integer pageNum, Integer pageSize, Integer id) {
        //1.创建PageBean对象,用于封装分页数据
        PageBean<Post> pb = new PageBean<>();
        //2.开启分页查询 ->pageHelper(需要导入依赖)，有了pageHelper，就可以进行分页了，会自动拼接到sql，进行分页
        PageHelper.startPage(pageNum,pageSize);
        List<Post> posts = PostsMapper.getPostsList(pageNum, pageSize, id);
        //Page中提供了方法，可以获取PageHelper分页查询后，得到的总记录条数和当前页数据
        //Page 是 PageHelper 提供的一个接口实现，封装了分页查询后的结果数据。
        Page<Post> p = (Page<Post>) posts;
        //把数据填充到PageBean对象中
        pb.setTotal(p.getTotal());
        pb.setItems(p.getResult());
        return pb;
    }

    // 根据文章ID查询文章
    @Override
    public Post findByPostId(Long id) {
        Post postId = PostsMapper.findByPostId(id);
        return postId;
    }

    // 修改文章
    @Override
    public void updatePosts(PostsDTO postsDTO) {
        // 处理meta_data为空的情况
        if (postsDTO.getMetaData() == null || postsDTO.getMetaData().trim().isEmpty()) {
            postsDTO.setMetaData("{}");
        }
        PostsMapper.updatePosts(postsDTO);
    }

    //修改文章评论状态
    @Override
    public void updateCommentStatus(String commentStatus, Long postId) {
        postsMapper.updateCommentStatus(commentStatus,postId);
    }

    //修改文章置顶状态
    @Override
    public void updateIsTop(Integer isTop, Long postId) {
        postsMapper.updateIsTop(isTop,postId);
    }

    // 删除文章
    @Override
    public void deleteById(Long postId) {
        PostsMapper.deleteById(postId);
    }

    //修改文章发布状态
    @Override
    public void updateStatus(String status, Long postId) {
        postsMapper.updateStatus(status,postId);
    }


}
